<?php

namespace app\admin\controller;

use app\admin\model\AliYunSmsModel;
use think\admin\Controller;
use think\Db;

/**
 * Class CronSms
 * @package app\admin\controller
 * 定时任务处理相关数据
 */
class CronSms extends Controller
{

    //考勤预警,发送预警短信记录
    //短信模板：【久久金】【深圳99金总部一号】今日门店员工迟到，门店未正常营业
    //请求地址：http://www.99goldadmin.com/admin.html#/admin/cron_sms/shop_check_work_warning.html
    //请求地址：http://139.159.156.100/admin.html#/admin/cron_sms/shop_check_work_warning.html?p_num=1&state=3
    //目前只给门店管理人员发送短信   CronSmsTabShop
    public function shop_check_work_warning($id=0,$state=0){
        // status 状态：1为正常；2为异常 is_send 短信是否发送：1为待发送，2为已发送 sms_status 短信发送状态：1为待发送，2为发送成功，3为发送失败
        $map_str="status=2 and is_send=1";
        $data=input();
        if(isset($data['id'])&&$data['id']){  //指定ID发送短信
            $id=$data['id'];
        }
        if(isset($data['state'])&&$data['state']){ //判断是否有数据返回
            $state=$data['state'];
        }
        if($id){
            $map_str.=" and id=".$id;
        }
        $p_num=50;
        if(isset($data['p_num'])&&$data['p_num']){ //每次处理的数量
            $p_num=$data['p_num'];
        }
        $is_log=0;//是否生成日志记录
        if($state==3){
            $is_log=1;
        }
        $fields="id,shop_id";
        $list = $this->app->db->table('lg_shop_check_work_warning')->field($fields)->where($map_str)->order('id desc,sms_status asc')->limit($p_num)->select();
        $total_num = $this->app->db->table('lg_shop_check_work_warning')->where($map_str)->count();//待发送数量
        $msg="总量:".$total_num.";当前处理量：".count($list).";";
        $yes_num=0;//成功数量
        $not_num=0;//失败数量
        $not_msg=$yes_msg="";//成功信息
        if($list){
            foreach ($list as $k=>$v){
                $shop_id=$v['shop_id'];
                if($shop_id){
                    //门店管理员
                    $shop_admin_phone=$this->app->db->table('lg_shop_admin')->where("find_in_set($shop_id,shop_id)")->column("phone");
                    //门店名称
                    $shop_name=$this->app->db->table('lg_distributor')->where("id=".$shop_id)->value("name");
                    if($shop_admin_phone&&$shop_name){
                        $shop_admin_phone=array_values(array_unique($shop_admin_phone));
                        // 阿里云 不同手机号码，相同短信内容发送，最大一个批次发送1000条
                        $phone=implode(',',$shop_admin_phone);
                        $sms_content="【".$shop_name."】今日门店员工迟到，门店未正常营业";//短信内容
                        $TemplateParam=['param'=>$sms_content];
                       // $aliYunSms=AliYunSmsModel::sendSms($phone,$TemplateParam);
                        $aliYunSms['code']=200;
                        if($aliYunSms&&isset($aliYunSms['code'])&&$aliYunSms['code']==200){
                            $map_u=[];
                            $map_u['is_send']=2;//短信是否发送：1为待发送，2为已发送
                            $map_u['sms_status']=2;// 短信发送状态：1为待发送，2为发送成功，3为发送失败
                            $map_u['send_time']=time();// 发送时间
                            $map_u['send_msg']="发送成功";// 发送时间
                            $this->app->db->table('lg_shop_check_work_warning')->where("id=".$v['id'])->update($map_u);
                            $is_log=1;

                            $yes_num+=1;
                            $yes_msg.="ID=".$v['id'].",shop_id=".$v['shop_id'].",门店管理员号码[".$phone."],门店名称[".$shop_name."],短信发送成功,处理成功；";
                        }else{
                            $send_msg="短信发送失败";
                            $map_u=[];
                            $map_u['send_msg']=$send_msg;
                            $map_u['sms_status']=3;// 短信发送状态：1为待发送，2为发送成功，3为发送失败
                            $this->app->db->table('lg_shop_check_work_warning')->where("id=".$v['id'])->update($map_u);
                            $not_num+=1;
                            $not_msg.="ID=".$v['id'].",shop_id=".$v['shop_id'].",门店管理员号码[".$phone."],门店名称[".$shop_name."],短信发送失败,处理失败；";
                        }
                    }else{
                        $send_msg="";
                        if($shop_admin_phone){
                            $shop_admin_phone=array_values(array_unique($shop_admin_phone));
                            // 阿里云 不同手机号码，相同短信内容发送，最大一个批次发送1000条
                            $phone=implode(',',$shop_admin_phone);
                        }else{
                            $send_msg.="暂无关联对应的店铺管理员，店铺名称[".$shop_name."]";
                            $phone="暂无关联门店管理员";
                        }
                        $map_u=[];
                        $map_u['send_msg']=$send_msg;
                        $map_u['sms_status']=3;// 短信发送状态：1为待发送，2为发送成功，3为发送失败
                        $this->app->db->table('lg_shop_check_work_warning')->where("id=".$v['id'])->update($map_u);

                        $not_num+=1;
                        $not_msg.="ID=".$v['id'].",shop_id=".$v['shop_id'].",门店管理员号码[".$phone."],门店名称[".$shop_name."],处理失败；";
                    }
                }else{   //店铺ID为0

                    $send_msg="店铺ID参数错误，不能为空";
                    $map_u=[];
                    $map_u['send_msg']=$send_msg;
                    $map_u['sms_status']=3;// 短信发送状态：1为待发送，2为发送成功，3为发送失败
                    $this->app->db->table('lg_shop_check_work_warning')->where("id=".$v['id'])->update($map_u);

                    $not_num+=1;
                    $not_msg.="ID=".$v['id'].",shop_id=".$v['shop_id'].",店铺ID为0,处理失败；";
                }
            }
        }else{
            $msg= "暂无短信发送";
        }
        //记录日志
        if($yes_num){
            $msg.="处理成功量：".$yes_num."；OK信息：".$yes_msg;
//            if($state==1){
//                $msg.="处理成功量：".$yes_num."；OK信息：".$yes_msg;
//            }elseif ($state==2){
//                $msg.="处理成功量：".$yes_num;
//            }
        }
        if($not_num){
            $msg.="处理失败量：".$not_num."；失败信息：".$not_msg;
//            if($state==1){
//                $msg.="处理失败量：".$not_num."；失败信息：".$not_msg;
//            }elseif ($state==2){
//                $msg.="处理失败量：".$not_num;
//            }
        }
        if($state){
            echo $msg;
        }
        if($list&&$is_log){
            sysoplog('发送考勤预警短信定时任务', $msg);
        }
    }

    //巡店预警,发送巡店预警短信记录
    //短信模板：【久久金】【深圳99金总部一号】的工作人员已离开工作岗位30分钟，请及时跟进。
    //请求地址：http://www.99goldadmin.com/admin.html#/admin/cron_sms/patrol_shop_warning.html
    //请求地址：http://139.159.156.100/admin.html#/admin/cron_sms/patrol_shop_warning.html?p_num=1&state=3
    //目前只给门店管理人员发送短信  CronSmsTabPatrol
    public function patrol_shop_warning($id=0,$state=0){
        // status 状态：1为正常；2为异常 is_send 短信是否发送：1为待发送，2为已发送 sms_status 短信发送状态：1为待发送，2为发送成功，3为发送失败
        $map_str="status=2 and is_send=1";
        $data=input();
        if(isset($data['id'])&&$data['id']){  //指定ID发送短信
            $id=$data['id'];
        }
        if(isset($data['state'])&&$data['state']){ //判断是否有数据返回
            $state=$data['state'];
        }
        if($id){
            $map_str.=" and id=".$id;
        }
        $p_num=50;
        if(isset($data['p_num'])&&$data['p_num']){ //每次处理的数量
            $p_num=$data['p_num'];
        }
        $is_log=0;//是否生成日志记录
        if($state==3){
            $is_log=1;
        }
        $fields="id,shop_id";
        $list = $this->app->db->table('lg_patrol_shop_warning')->field($fields)->where($map_str)->order('id desc,sms_status asc')->limit($p_num)->select();
        $total_num = $this->app->db->table('lg_patrol_shop_warning')->where($map_str)->count();//待发送数量
        $msg="总量:".$total_num.";当前处理量：".count($list).";";
        $yes_num=0;//成功数量
        $not_num=0;//失败数量
        $not_msg=$yes_msg="";//成功信息
        if($list){
            foreach ($list as $k=>$v){
                $shop_id=$v['shop_id'];
                if($shop_id){
                    //门店管理员
                    $shop_admin_phone=$this->app->db->table('lg_shop_admin')->where("find_in_set($shop_id,shop_id)")->column("phone");
                    //门店名称
                    $shop_name=$this->app->db->table('lg_distributor')->where("id=".$shop_id)->value("name");
                    if($shop_admin_phone&&$shop_name){
                        $shop_admin_phone=array_values(array_unique($shop_admin_phone));
                        $tour_time_interval=30;//单位是分钟，默认从数据库配置文件拿取，tour_time_interval
                        $db_tti=$this->app->db->table('system_config')->where("name='tour_time_interval'")->order("id desc")->value("value");
                        if($db_tti&&is_numeric($db_tti)){
                            $tour_time_interval=$db_tti;
                        }
                        // 阿里云 不同手机号码，相同短信内容发送，最大一个批次发送1000条
                        $phone=implode(',',$shop_admin_phone);
                        $sms_content="【".$shop_name."】的工作人员已离开工作岗位".$tour_time_interval."分钟，请及时跟进。";//短信内容
                        $TemplateParam=['param'=>$sms_content];
                        //$aliYunSms=AliYunSmsModel::sendSms($phone,$TemplateParam);
                        $aliYunSms['code']=200;
                        if($aliYunSms&&isset($aliYunSms['code'])&&$aliYunSms['code']==200){
                            $map_u=[];
                            $map_u['is_send']=2;//短信是否发送：1为待发送，2为已发送
                            $map_u['sms_status']=2;// 短信发送状态：1为待发送，2为发送成功，3为发送失败
                            $map_u['send_time']=time();// 发送时间
                            $map_u['send_msg']="发送成功";// 发送时间
                            $this->app->db->table('lg_patrol_shop_warning')->where("id=".$v['id'])->update($map_u);
                            $is_log=1;

                            $yes_num+=1;
                            $yes_msg.="ID=".$v['id'].",shop_id=".$v['shop_id'].",门店管理员号码[".$phone."],门店名称[".$shop_name."],短信发送成功,处理成功；";
                        }else{
                            $send_msg="短信发送失败";
                            $map_u=[];
                            $map_u['send_msg']=$send_msg;
                            $map_u['sms_status']=3;// 短信发送状态：1为待发送，2为发送成功，3为发送失败
                            $this->app->db->table('lg_patrol_shop_warning')->where("id=".$v['id'])->update($map_u);
                            $not_num+=1;
                            $not_msg.="ID=".$v['id'].",shop_id=".$v['shop_id'].",门店管理员号码[".$phone."],门店名称[".$shop_name."],短信发送失败,处理失败；";
                        }
                    }else{
                        $send_msg="";
                        if($shop_admin_phone){
                            $shop_admin_phone=array_values(array_unique($shop_admin_phone));
                            // 阿里云 不同手机号码，相同短信内容发送，最大一个批次发送1000条
                            $phone=implode(',',$shop_admin_phone);
                        }else{
                            $send_msg.="暂无关联对应的店铺管理员，店铺名称[".$shop_name."]";
                            $phone="暂无关联门店管理员";
                        }
                        $map_u=[];
                        $map_u['send_msg']=$send_msg;
                        $map_u['sms_status']=3;// 短信发送状态：1为待发送，2为发送成功，3为发送失败
                        $this->app->db->table('lg_patrol_shop_warning')->where("id=".$v['id'])->update($map_u);

                        $not_num+=1;
                        $not_msg.="ID=".$v['id'].",shop_id=".$v['shop_id'].",门店管理员号码[".$phone."],门店名称[".$shop_name."],处理失败；";
                    }
                }else{   //店铺ID为0
                    $send_msg="店铺ID参数错误，不能为空";
                    $map_u=[];
                    $map_u['send_msg']=$send_msg;
                    $map_u['sms_status']=3;// 短信发送状态：1为待发送，2为发送成功，3为发送失败
                    $this->app->db->table('lg_patrol_shop_warning')->where("id=".$v['id'])->update($map_u);
                    $not_num+=1;
                    $not_msg.="ID=".$v['id'].",shop_id=".$v['shop_id'].",店铺ID为0,处理失败；";
                }
            }
        }else{
            $msg= "暂无短信发送";
        }
        //记录日志
        if($yes_num){
            $msg.="处理成功量：".$yes_num."；OK信息：".$yes_msg;
//            if($state==1){
//                $msg.="处理成功量：".$yes_num."；OK信息：".$yes_msg;
//            }elseif ($state==2){
//                $msg.="处理成功量：".$yes_num;
//            }
        }
        if($not_num){
            $msg.="处理失败量：".$not_num."；失败信息：".$not_msg;
//            if($state==1){
//                $msg.="处理失败量：".$not_num."；失败信息：".$not_msg;
//            }elseif ($state==2){
//                $msg.="处理失败量：".$not_num;
//            }
        }
        if($state){
            echo $msg;
        }
        if($list&&$is_log){
            sysoplog('发送巡店预警短信定时任务', $msg);
        }
    }


    public function handle_patrol_shop_warning_data($id=0){
        $data=input();
        $map_str="1=1 and (equip_id=''or channel_id='' or shop_clerks_id=0)";
        if(isset($data['id'])&&$data['id']){  //指定ID发送短信
            $id=$data['id'];
        }
        if($id){
            $map_str.=" and id=".$id;
        }
        $p_num=50;
        if(isset($data['p_num'])&&$data['p_num']){ //每次处理的数量
            $p_num=$data['p_num'];
        }
        $fields="id,shop_id,shop_name,shop_encrypt,equip_id,channel_id,shop_clerks_id";
        $list = $this->app->db->table('lg_patrol_shop_warning')->field($fields)->where($map_str)->order('id desc')->limit($p_num)->select();
        if($list){
            foreach ($list as $k=>$v){
                $map_u=[];
                $shop_id=$v['shop_id'];
                $shop_name=$v['shop_name'];
                $shop_encrypt=$v['shop_encrypt'];
                if(empty($shop_name)||$shop_encrypt){
                    $shop=$this->app->db->name("lg_distributor")
                        ->field("encrypt,name")->where(['id' => $shop_id])->find();
                    if($shop){
                        $map_u['shop_name']    = $shop['name'];
                        $map_u['shop_encrypt'] = $shop['encrypt'];
                    }
                }
                $equip_id=$v['equip_id'];
                $channel_id=$v['channel_id'];
                if(empty($equip_id)||empty($channel_id)){
                    //那最新的一条设备数据
                    $equip=$this->app->db->name("lg_equip")->field("name,equip_id,channel_id,channel_name")
                        ->where("is_come=1 and shop_id=".$shop_id)->order("id desc")->limit(1)->find();
                    if($equip){
                        $equip_id=$equip['equip_id'];
                        $channel_id=$equip['channel_id'];
                        $map_u['equip_id']      = $equip_id;
                        $map_u['equip_name']    = $equip['name'];
                        $map_u['channel_id']    = $channel_id;
                        $map_u['channel_name']  = $equip['channel_name'];
                    }
                }else{
                    $equip=$this->app->db->name("lg_equip")->field("equip_id,channel_id")
                        ->where("is_come=1 and shop_id=".$shop_id)->order("id desc")->limit(1)->find();
                    if($equip){
                        $equip_id=$equip['equip_id'];
                        $channel_id=$equip['channel_id'];
                    }
                }
                $shop_clerks_id=$v['shop_clerks_id'];
                if(empty($shop_clerks_id)&&$equip_id&&$channel_id){
                    $nts=strtotime(date('Y-m-d 00:00:00'));
                    $nte=strtotime(date('Y-m-d 23:59:59'));
                    $map_str_f="channel_id=$channel_id and equipment_id='$equip_id' and shop_id=".$shop_id;
                    $map_str_f.=" and create_time>=$nts and create_time<=$nte";
                    $face_id=$this->app->db->name("lg_face_recognition_staff")
                        ->where($map_str_f)
                        ->order("id desc")->limit(1)->value("face_id");
                    if($face_id){
                        $user=$this->app->db->name("lg_shop_clerks")->field("id,name")
                            ->where("face_id='$face_id' and shop_id=".$shop_id)->order("id desc")->limit(1)->find();
                        if($user){
                            $map_u['shop_clerks_id']    = $user['id'];
                            $map_u['shop_clerks_name']  = $user['name'];
                        }
                    }
                }
                if($map_u){
                    $this->app->db->name("lg_patrol_shop_warning")->where("id=".$v['id'])->update($map_u);
                }
            }
        }
    }

}